
var store_estadosolicitud
var store_tiposolicitud;
var store_departamento;
var store_editor;

Ext.onReady(function()
{

    store_tiposolicitud = new Ext.data.ArrayStore({
        fields : [ 'Id', 'TipoSol' ],
        data   : [[0, 'Ambos'],
                  [1, 'Reembolso de Caja Chica'],
                  [2, 'Pago']
                 ]
    });

    store_estadosolicitud = new Ext.data.ArrayStore({
        fields : [ 'Id', 'EstadoSol' ],
        data   : [[0, 'Todos'],
                  [1, 'No confirmado'],
                  [2, 'Confirmado'],
                  [3, 'Rechazado']
                 ]
    });

    store_departamento = new X.store.Json({
        fields : [
            'codigoDepartamento',
            'nombreDepartamento'
        ]
    });

    store_editor = new X.store.Json({
        url    : '/listado/ajax-filtro',
        fields : [
            'nombreDepartamento',
            'numeroSolicitud',
            'tipoSolicitud',
            'estadoSolicitud',
            'chequeOrden',
            'fechaSolicitud',
            'observaciones',
            'monto'
        ]
    });

    store_editor.addListener('load', function(store, records, options){
        try{
            var sum = 0;
            for (var i=0; i< records.length; i++){
                sum += parseInt(records[i].get('monto'));
            }
            Ext.getCmp('total').setValue(sum);
        }
        catch(e){
            X.msg.FailureJs(e.message);
        }
    });

    var grid = new X.grid.GridPanel({
        id        : 'editor',
        height    : 220,
        store     : store_editor,
        useBbar   : false,
        
        columns:[
            new X.column.Text   ({header: 'Departamento',  width: 100,
                                  dataIndex: 'nombreDepartamento'}),
            new X.column.Text   ({header: 'Solicitud N°',  width:  80,
                                  dataIndex:    'numeroSolicitud'}),
            new X.column.Text   ({header: 'Tipo',          width: 130,
                                  dataIndex:      'tipoSolicitud'}),
            new X.column.Text   ({header: 'Estado',        width:  80,
                                  dataIndex:    'estadoSolicitud'}),
            new X.column.Date   ({header: 'Fecha',         width:  70,
                                  dataIndex:     'fechaSolicitud'}),
            new X.column.Text   ({header: 'Observaciones', width: 182,
                                  dataIndex:      'observaciones'}),
            new X.column.Text   ({header: 'Orden de pago', width: 182,
                                  dataIndex:        'chequeOrden'}),
            new X.column.Money  ({header: 'Monto',         width: 140,
                                  dataIndex:              'monto'})
            
        ]
    });

    var form = new X.form.FormPanel2({
        title            : 'Generar listado de solicitudes',
        submitButtonText : 'Generar',
        returnButtonText : 'Cancelar',
        submitUrl        : '/listado/ajax-crear', //Generar el pdf
        returnUrl        : '/listado/pdf',      //Volver al menu inicial
        width            : 658,
        height           : 480,
        labelWidth       : 90,
        layout           : 'absolute',

        items:[
            new Ext.form.FieldSet({title:'Solicitudes', x: 10, y: 5, width: 370, items:
            [
                // agregar tipo de solicitud
                new X.field.Hidden({ id:'editorRows' }),
                new X.field.Combo({
                    id           : 'filtroSolicitud',
                    hiddenName   : 'TipoSol',
                    fieldLabel   : 'Tipo',
                    valueField   : 'Id',
                    displayField : 'TipoSol',
                    width        : 230,
                    store        : store_tiposolicitud
                }),
                new X.field.Combo({
                    id           : 'filtroEstado',
                    hiddenName   : 'EstadoSol',
                    fieldLabel   : 'Estado',
                    valueField   : 'Id',
                    displayField : 'EstadoSol',
                    width        : 230,
                    store        : store_estadosolicitud
                }),
                new X.field.Combo ({
                        id           : 'filtroDepartamento',
                        hiddenName   : 'codigoDepartamento',
                        fieldLabel   : 'Departamento',
                        valueField   : 'codigoDepartamento',
                        displayField : 'nombreDepartamento',
                        width        : 230,
                        store        : store_departamento
                 })
            ]}),
            new Ext.form.FieldSet({title:'Período', x: 395, y: 5, width: 240, height: 113, layout:'absolute', items:
            [
                { layout:'form', x: 5, y: 0 , items:[
                    new X.field.Date ({fieldLabel:'Fecha Inicial', id:'filtroInicial', width:100,
                                       vtype: 'daterange', endDateField:'filtroFinal', allowBlank: true,
                                       listeners: { 
                                           change: function(){ Ext.getCmp('listar').enable()},
                                           select: function(){ Ext.getCmp('listar').enable()}
                                       }
                    }),
                    new X.field.Date ({fieldLabel:'Fecha Final',   id:'filtroFinal',   width:100,
                                       vtype: 'daterange', startDateField:'filtroInicial', maxValue: new Date(), allowBlank: true,
                                       listeners: { 
                                           change: function(){ Ext.getCmp('listar').enable()},
                                           select: function(){ Ext.getCmp('listar').enable()}
                                       }
                    }),
                ]},
                {layout:'form', x: 110, y: 55, items:[
                    new Ext.Button   ({text:'Listar', id: 'listar', width:80, handler:cargar_grilla, disabled: true })
                ]}
            ]}),
            new Ext.form.FieldSet({title:'Resultados', x: 10, y: 125,width: 626,items:[
                grid,
            ]}),
            {
                layout: 'form', x: 10, y:390, labelWidth:40, items:[
                    new X.field.Number({fieldLabel:'Total',  id:'total', width:150, readOnly: true}),
                ]
            }
        ]
    });

    // ajax para cargar los datos filtrador
    function cargar_grilla(){
        store_editor.setBaseParam('filtroDepartamento', Ext.getCmp('filtroDepartamento').getValue());
        store_editor.setBaseParam('filtroSolicitud',    Ext.getCmp('filtroSolicitud')   .getValue());
        store_editor.setBaseParam('filtroInicial',      Ext.getCmp('filtroInicial')     .getValue());
        store_editor.setBaseParam('filtroEstado',       Ext.getCmp('filtroEstado')      .getValue());
        store_editor.setBaseParam('filtroFinal',        Ext.getCmp('filtroFinal')       .getValue());
        store_editor.reload();
    }

    form.getForm().addListener('beforeaction', function(form, action){
        if (store_editor.getCount() <= 0){
            X.msg.Failure('Debe haber al menos un movimiento'); return false;
        }
        return true;
    });

    // validacion de filtroInicial y filtroFinal
    Ext.apply(Ext.form.VTypes, {
        daterangeText : 'Formato incorrecto',
        daterange     : function(val, field) {
            var date = field.parseDate(val);

            if(!date){
                return false;
            }
            if (field.startDateField) {
                var start = Ext.getCmp(field.startDateField);
                if (!start.maxValue || (date.getTime() != start.maxValue.getTime())) {
                    start.setMaxValue(date);
                    start.validate();
                }
            }
            else if (field.endDateField) {
                var end = Ext.getCmp(field.endDateField);
                if (!end.minValue || (date.getTime() != end.minValue.getTime())) {
                    end.setMinValue(date);
                    end.validate();
                }
            }
            return true;
        },
        totalText : 'Al menos una solicitud',
        total     : function(val, field) {
            return store_editor.getCount() > 0;
        }
    });
});
